LogSoftmax
对输入数组沿指定维度进行 Log-Softmax 计算,输出每个元素的对数概率值。
\[\text{output}_{i} = \log\frac{\exp(\text{input}_{i})}{\sum_j \exp(\text{input}_j)}
\quad \text{for elements along the given axis}\]
- 输入:
input_ptr - 输入数据地址。
axis - 归一化的轴。
n_dim - 输入张量维度。
inner_size - 内部尺寸(轴之后的元素个数)。
outter_size - 外部尺寸(轴之前的元素个数)。
axis_size - 归一化轴的元素数量。
core_mask - 核掩码(仅适用于共享存储版本)。
sum_data - 中间累加存储地址(用于存放指数和)。
- 输出:
output_ptr - Log-Softmax 计算结果地址。
- 支持平台:
FT78NEMT7004
备注
FT78NE 支持fp, int8
MT7004 支持hp, fp
共享存储版本:
-
void fp_logsoftmax_s(float *input_ptr, float *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)
-
void hp_logsoftmax_s(half *input_ptr, half *output_ptr, half *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)
-
void i8_logsoftmax_s(int8_t *input_ptr, int8_t *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size, int core_mask)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <logsoftmax.h>
4
5int main() {
6 float *input = (float *)0xA0000000; // input在DDR空间
7 float *output = (float *)0xC0000000;
8 float *sum_data = (float *)0xD0000000;
9 int axis = 1;
10 int n_dim = 3;
11 int inner_size = 4;
12 int outter_size = 2;
13 int axis_size = 3;
14 int core_mask = 0xff;
15
16 fp_logsoftmax_s(input, output, sum_data, axis, n_dim, inner_size, outter_size, axis_size, core_mask);
17 return 0;
18}
私有存储版本:
-
void fp_logsoftmax_p(float *input_ptr, float *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)
-
void hp_logsoftmax_p(half *input_ptr, half *output_ptr, half *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)
-
void i8_logsoftmax_p(int8_t *input_ptr, int8_t *output_ptr, float *sum_data, int axis, int n_dim, int inner_size, int outter_size, int axis_size)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <logsoftmax.h>
4
5int main() {
6 float *input = (float *)0x10810000; // input在L2空间
7 float *output = (float *)0x10820000;
8 float *sum_data = (float *)0x10830000;
9 int axis = 1;
10 int n_dim = 3;
11 int inner_size = 4;
12 int outter_size = 2;
13 int axis_size = 3;
14
15 fp_logsoftmax_p(input, output, sum_data, axis, n_dim, inner_size, outter_size, axis_size);
16 return 0;
17}